package obstaculos;

import org.anddev.andengine.entity.sprite.AnimatedSprite;
import org.anddev.andengine.entity.sprite.Sprite;
import org.anddev.andengine.opengl.texture.TextureManager;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.anddev.andengine.opengl.texture.region.TextureRegion;
import org.anddev.andengine.opengl.texture.region.TiledTextureRegion;

import android.content.Context;

public class ElevadoresSortidos extends Obstaculo{
	
	private BitmapTextureAtlas mapaDeTexturas, mapaDeTexturasGatilho;
	private TextureRegion textura;
	private TiledTextureRegion texturaGatilho;
	
	public float vely = 0;
	public boolean mexendo = false;
	
	public ElevadoresSortidos(int x, int y, Context contexto, TextureManager tm) {
		this.x = x;
		this.y = y;
		xGatilho = x + 320;
		yGatilho = y + 128;
		largura = 704;
		altura = 64;
		larguraGatilho = 64;
		alturaGatilho = 64;

		posicoesX[0] = x;
		posicoesY[0] = y;
		
		for(int i = 1; i < ordens.length; i++){
			posicoesX[i] = posicoesX[i-1] + 64;
			if(ordens[i] == 0){
				posicoesY[i] = y;
			}else{
				posicoesY[i] = y + 32;
			}
		}

		mapaDeTexturas = new BitmapTextureAtlas(64, 64, TextureOptions.BILINEAR);
		BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
		textura = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mapaDeTexturas, contexto, "Elevadores sortidos.png", 0, 0);
		tm.loadTexture(mapaDeTexturas);
		
		mapaDeTexturasGatilho = new BitmapTextureAtlas(128, 64, TextureOptions.BILINEAR);
		texturaGatilho = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mapaDeTexturasGatilho, contexto, "Gatilho #2.png", 0, 0, 2, 1);
		tm.loadTexture(mapaDeTexturasGatilho);
		
		for(int i = 1; i < ordens.length; i++){
			spritesIndividuais.add(new Sprite(x, y, textura));
			spritesIndividuais.get(i-1).setPosition(posicoesX[i], posicoesY[i]);
		}
		sprite = new Sprite(x, y, textura);
		spriteGatilhoAnimado = new AnimatedSprite(xGatilho, yGatilho, texturaGatilho);
		spriteGatilhoAnimado.animate(200, true);
	}

	@Override
	public void atualiza() {
		
		Tx = ((int)x + 32) / 32;
		Ty = ((int)y + 64) / 32;
		
		if(ativado && posicoesY[0] < y + 32){
			mexendo = true;
			for(int i = 0; i < ordens.length; i++){
				if(ordens[i] == 0){
					posicoesY[i] +=2;
				}else{
					posicoesY[i] -=2;
				}
			}
		}else if(!ativado && posicoesY[2] < y + 32){
			for(int i = 0; i < ordens.length; i++){
				if(ordens[i] == 0){
					posicoesY[i] -=2;
				}else{
					posicoesY[i] +=2;
				}
			}
		}else{
			mexendo = false;
		}
	}

	@Override
	public boolean colidiuComDono(AnimatedSprite spriteDono) {
		if((spriteDono.getX() + 64 > x) && (spriteDono.getX() < x + (64*11)) && (spriteDono.getY() + 128 > y)){
			return true;
		}
		return false;
	}

	@Override
	public boolean colidiuComCaoGuia(AnimatedSprite spriteCaoGuia) {
		if(spriteCaoGuia.collidesWith(spriteGatilhoAnimado)){
			return true;
		}else{
			return false;
		}
	}
	
	@Override
	public void posicionaNaCena(int mapx, int mapy) {
		for(int i = 0; i < spritesIndividuais.size(); i++){
			spritesIndividuais.get(i).setPosition((int)posicoesX[i]-mapx, (int)posicoesY[i]-mapy);
		}
		spriteGatilhoAnimado.setPosition((int)xGatilho-mapx, (int)yGatilho-mapy);
		
		for(int i = 0; i < ordens.length; i++){
			//dbg.drawImage(sprite, (int)posicoesX[i]-mapx, (int)posicoesY[i]-mapy, null);
		}
		if(ativado){
			//dbg.drawImage(spriteAtivacao, (int)XAtivacao-mapx, (int)YAtivacao-mapy,(int)XAtivacao+32-mapx, (int)YAtivacao+32-mapy, 32, 0,64, 32, null);
		}else{
			//dbg.drawImage(spriteAtivacao, (int)XAtivacao-mapx, (int)YAtivacao-mapy,(int)XAtivacao+32-mapx, (int)YAtivacao+32-mapy, 0, 0,32, 32, null);
		}
	}
}